﻿/*
 * ----------------------------------------------------------------
 * Copyright @ @@神农写代码 2023. All rights reserved.
 
 * 作    者 ：@@神农写代码 
 
 * 创建时间 ：2023/2/8 19:34:56
 
 * CLR 版本 ：4.0.30319.42000
 
 * 命名空间 ：GCNF.Algorithm.MinimumActivity
 
 * 类 名 称 ：Class1

 * 类 描 述 ：
 
 * 博客地址：fu-shi-rong.blog.csdn.net
 
 * ------------------------------------------------------
 * 历史更新记录
 
 * 版本 ：  V1.0.0.0        修改时间：2023/2/8 19:34:56         修改人：
 
 * 修改内容：
 * 
 */
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text;

namespace GCNF.Algorithm.MinimumActivity
{
    public abstract class AbstractLeastActive
    {
        #region  变量 
        /// <summary>
        /// 静态字典
        /// </summary>
        public ConcurrentDictionary<string, int> keyValuePairs = new ConcurrentDictionary<string, int>();
        /// <summary>
        /// 相同编号的数据集合 
        /// </summary>
        protected List<string> list = new List<string>();
        #endregion  

        #region 虚函数
        /// <summary>
        /// 筛选最小编号的数据
        /// </summary>
        protected void FilterMinValue()
        {
            int number = int.MaxValue;
            foreach (var item in keyValuePairs)
            {
                if (number >= item.Value)
                {

                    if (number == item.Value)
                    {
                        number = item.Value;
                        list.Add(item.Key);
                        continue;
                    }
                    list.Clear();
                    number = item.Value;
                    list.Add(item.Key);
                }
            }
        }
        /// <summary>
        /// 随机集合中的数据
        /// </summary>
        protected string RandomValue()
        {
            Random random = new Random();
            var num = random.Next(list.Count);
            return list[num];
        }
        /// <summary>
        /// 活跃数加1
        /// </summary>
        /// <param name="key">key值</param>
        protected void AddActive(string key) {
            keyValuePairs.TryUpdate(key, keyValuePairs[key]+1, keyValuePairs[key]);
        }
        #endregion

        /// <summary>
        /// 释放编号
        /// </summary>
        /// <param name="key"></param>
        public abstract void Dispose(string key);
        /// <summary>
        /// 获取最小活跃数
        /// </summary>
        /// <returns></returns>
        public abstract string GetValue();

    }
}
